The Component Object Model (COM) is the Microsoft Corporations framework for developing and supporting program component objects that provides a framework for the interoperation of objects. COM provides the underlying services of interface negotiation, life cycle management (determining when a component can be removed from a system), and related services. Moreover, the COM software architecture allows components made by different software vendors to be combined into a variety of applications. In summary, COM defines a standard for component interoperability, is not dependent on any particular programming language, is available on multiple platforms, and is extensible.
In COM, like other object-oriented programming models, an object (known as an container object) can reuse and extend functionality from other objects. This ability, in turn, speeds up program development and is one of the key benefits of software componentization. COM supports two forms of object reuse, aggregation and delegation, and each form can extend a single object or multiple objects into the logical construct of a container object.
Managed code (that is, code developed for Microsoft's .NET framework) does not allow multiple implementation inheritance, a type of multiple implementation reuse, and thus, in the context of multiple inheritance, managed code cannot aggregate multiple objects within a single container object directly. Instead, managed code objects can only achieve multiple inheritance using the delegation technique (that is, multiple interface inheritance), or indirect inheritance. This delegation technique, however, results in unavoidable code clutter, and the industry to date has not adequately addressed this shortcoming in the art.